package io;

import Day04.WhlieDemo;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

/**
 通过提高每次读写的数据量减少实际读写的次数。可以提供读写的效率
 一组字节的读写：块读写
 */
public class CopyDemo2 {
    public static void main(String[] args) throws IOException {
        FileInputStream fis= new FileInputStream("2.jpg");
        FileOutputStream fos = new FileOutputStream("2copy2.jpg");

        /*
            InputStream超类中定义了块读取数据的方法：
            int read(byte[] data)
            一次性读取给定的字节数组data总长度的字节量，并存入字节数组中
            返回值表示实际读取到了多少个字节，若返回-1表示读到了末尾

            OutputStream超类上也定义了块读取数据的方法：
            void read(byte[] data)
            一次性读取给定的字节数组data中的所有字节写去

            void write(byte[] data,int offset,int len)
            一次性将给定的字节数组data 中的所有宁节写出
            void write(byte[] data,int offset,int len)
            一次性将给定的字节数data从 下标offset处开始的连续Len 个字节写出
         */

        long start= System.currentTimeMillis();

        byte[] data = new byte[1024*10];//10kb
       /* while (fis.read(data)!=-1){//每次读取10kb并判断是否读取到了末尾
            fos.write(data);//一次写入10kb数据
        }*/

        int len;//解决现文件比原文件大的问题
        while ((len=fis.read(data))!=-1){
            fos.write(data,0,len);
        }
        long end = System.currentTimeMillis();
        System.out.println("复制完毕,耗时"+(end-start)+"ms");
        fis.close();
        fos.close();
    }
}
